package cn.org.xuanguang.kepler.hormos.rdb.jpa.generation;


import cn.org.xuanguang.kepler.core.extension.ExtensionLoader;
import cn.org.xuanguang.kepler.core.extension.SPI;

/**
 * 生成信息的接口
 * 所有的生成策略都应集成此类
 *
 * @param <T> 生成值的类型, 例如自动生成id
 * @since 3.0
 */
@SPI(value = "default_id")
public interface GenerationValues<T> {
    /**
     * 生成值
     *
     * @return
     */
    public Object getValue(String type);

    /**
     * 策略id
     *
     * @return
     */
    public String getGenerationId();

    public static <T> GenerationValues<T> of(String generationId) {
        return ExtensionLoader.getExtensionLoader(GenerationValues.class).getExtension(generationId);
    }

}
